facebook: stały Token dostępu do strony?

Pracuję nad projektem, który ma Strony facebook jako jedno ze źródeł danych. Okresowo importuje z niego niektóre dane bez udziału GUI. Następnie używamy aplikacji internetowej, aby pokazać dane, które już mamy.

Nie wszystkie informacje są jawne. Oznacza to, że muszę raz uzyskać dostęp do danych, a następnie je zachować. Jednak nie znam tego procesu i nie znalazłem jeszcze dobrego samouczka na ten temat. Chyba potrzebuję access_token, Jak mogę go dostać od użytkownika, krok po kroku? Użytkownik jest adminem Facebook page, czy będzie musiał dodać jakąś naszą aplikację na FB do strony?

EDIT: dzięki @ phwd za podpowiedź. Zrobiłem samouczek Jak uzyskać stały token dostępu do strony, nawet jeśli offline_access już nie istnieje.

EDIT: właśnie się dowiedziałem, że odpowiedź jest tutaj: Długotrwały dostęp do FB-token dla serwera do ściągnięcia informacji o stronie fb

Author: Community, 2013-06-19

12 answers

Postępując zgodnie z instrukcjami zawartymi w dokumentacji Facebook ' a rozszerzającej dokumentację tokenów strony udało mi się uzyskać token dostępu do strony, który nie wygasa.

Sugeruję użycie Graph API Explorer dla wszystkich tych kroków, chyba że zaznaczono inaczej.

0. Tworzenie Aplikacji Facebook

Jeśli masz już aplikację, przejdź do kroku 1.

  1. przejdź do Moje aplikacje .
  2. kliknij "+ Dodaj nową aplikację".
  3. Konfiguracja strony internetowej app.

Nie musisz zmieniać jego uprawnień ani nic. Potrzebujesz tylko aplikacji, która nie zniknie, zanim skończysz z tokenem dostępu.

1. Get User Short-Lived Access Token

  1. przejdź do Graph API Explorer.
  2. Wybierz aplikację, dla której chcesz uzyskać token dostępu (w menu rozwijanym "aplikacja", a nie w menu "Moje aplikacje").
  3. Kliknij "Get Token" > "Get User Access Token".
  4. w pop-upie, pod Zakładka "rozszerzone uprawnienia", zaznacz "manage_pages".
  5. Kliknij "Pobierz Token Dostępu".
  6. przyznaj dostęp z konta Facebook, które ma dostęp do zarządzania stroną docelową. Zauważ, że jeśli ten użytkownik utraci dostęp, ostateczny, nigdy nie wygasający token dostępu prawdopodobnie przestanie działać.

Token pojawiający się w polu" access Token " jest Twoim krótkotrwałym tokenem dostępu.

2. Generowanie Długotrwałego Tokena Dostępu

Wykonując te instrukcje z Facebook docs, złóż prośbę o GET do

Https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={app_secret}&fb_exchange_token={short_lived_token}

Wprowadzenie w aplikacji identyfikatora i tajemnicy oraz krótkotrwałego tokena wygenerowanego w poprzednim kroku.

Nie możesz używać Graph API Explorer. Z jakiegoś powodu utknie na tej prośbie. Myślę, że to dlatego, że odpowiedź nie jest JSON, ale ciąg zapytania. Ponieważ jest to żądanie GET, możesz po prostu przejść do adresu URL w przeglądarce.

Odpowiedź powinna wyglądać tak:

{"access_token":"ABC123","token_type": "bearer", "expires_in": 5183791}

"ABC123" będzie twoim długotrwałym tokenem dostępu. Możesz umieścić go w debugerze Access Token, aby zweryfikować. Pod "wygasa" powinno mieć coś w rodzaju "2 miesiące".

3. Get User ID

Używając długotrwałego tokena dostępu, Wyślij żądanie GET do

Https://graph.facebook.com/v2.10/me?access_token={long_lived_access_token}

Pole id to identyfikator twojego konta. Będziesz go potrzebował do następnego kroku.

4. Get Permanent Page Access Token

Wyślij zapytanie GET do

Https://graph.facebook.com/v2.10/{account_id}/accounts?access_token={long_lived_access_token}

Odpowiedź JSON powinna mieć pole data, pod którym znajduje się tablica elementów, do których Użytkownik ma dostęp. Znajdź element dla strony, z której chcesz uzyskać token stałego dostępu. Pole access_token powinno zawierać twój stały token dostępu. Skopiuj go i przetestuj w debugerze Access Token . Pod "wygasa "powinno być napisane"nigdy".

 552
Author: donut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 21:51:19

Oto moje rozwiązanie używając tylko Graph API Explorer & Access Token Debugger :

  1. Graph API Explorer:
    • Wybierz aplikację z prawego górnego menu rozwijanego
    • Wybierz z listy rozwijanej" Get user Access Token " (po prawej stronie pola access token) i wybierz potrzebne uprawnienia
    • Kopiuj token dostępu użytkownika
  2. Access Token Debugger:
    • wklej skopiowany token i naciśnij "Debug"
    • Naciśnij "Extend access Token" i skopiuj wygenerowany długotrwały token dostępu użytkownika
  3. Graph API Explorer:
    • wklej skopiowany token do pola "Access Token"
    • wykonaj żądanie GET z "PAGE_ID?fields=access_token "
    • Znajdź stały token dostępu do strony w odpowiedzi (węzeł "access_token")
  4. (Opcjonalnie) Debugger Tokena Dostępu:
    • Wklej stały token i naciśnij "Debug"
    • "wygasa" powinno być "Nigdy"

(testowane z API w wersji 2.9-2.11, 3.0)

 56
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 14:32:42
 10
Author: chuycepeda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-09 15:21:16

Zrobiłem skrypt PHP, aby to ułatwić. Utwórz aplikację . W Graph API Explorer Wybierz swoją aplikację i uzyskaj token użytkownika z uprawnieniami manage_pages i publish_pages. Znajdź identyfikator swojej strony na dole strony o stronie. Wypełnij var konfiguracyjne i uruchom skrypt.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}
 9
Author: dw1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-29 17:13:13

Kolejna odpowiedź PHP ułatwiająca życie. [[5]}Aktualizacja dla Facebook Graph API 2.9 . Napełnij ją i załaduj.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

Addendum: (alternatywa)

Wykres 2.9 dalej, możesz pominąć wiele kłopotów związanych z uzyskaniem długiego tokenu dostępu, po prostu klikając Rozszerz Token dostępuna dole narzędzia debugera tokenu dostępu , po debugowaniu krótkiego tokenu dostępu. Uzbrojony w informacje o pageid i longlivedtoken, Uruchom poniższy php, aby uzyskać stały token dostępu.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

Chociaż drugi kod oszczędza wiele kłopotów, polecam uruchomienie pierwszego kodu php, chyba że się spieszysz, ponieważ sprawdza on pageid i userid. Drugi kod nie będzie działał, jeśli przez pomyłkę wybierzesz token użytkownika.

Dzięki dw1 i Rob

 8
Author: Siddhant Rimal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:31

Jeśli żądasz tylko danych strony, możesz użyć tokena dostępu do strony. Będziesz musiał autoryzować użytkownika tylko raz, aby uzyskać token dostępu użytkownika; przedłużyć go do dwóch miesięcy ważności, a następnie zażądać tokenu dla strony. Wszystko to zostało wyjaśnione w scenariuszu 5 . Należy pamiętać, że uzyskany token dostępu do strony jest ważny tylko tak długo, jak długo token dostępu użytkownika jest ważny.

 4
Author: phwd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-09 15:23:10

Podczas uzyskiwania tokena stałego dostępu wykonałem powyższe 5 kroków, jak wspomniano Donut. Jednak w 5. kroku podczas generowania stałego tokena dostępu zwracany jest długotrwały token dostępu(który jest ważny przez 2 miesiące), a nie stały token dostępu (który nigdy nie wygasa). zauważyłem, że aktualna wersja Graph API to V2. 5. Jeśli próbujesz uzyskać stały token dostępu z V2. 5, daje długotrwały token dostępu.Spróbuj wywołać API w wersji 2.2(jeśli nie możesz Zmień wersję w graph api explorer, naciśnij wywołanie APIhttps://graph.facebook.com/v2.2/{account_id}/accounts?access_token={long_lived_access_token}{[2]w nowej karcie z V2.2) wtedy otrzymasz stały token dostępu (który nigdy nie wygasa)

 4
Author: baji shaik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-20 03:25:02

Próbowałem tych kroków: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer

Get Permanent Page Access Token

  • przejdź do Graph API Explorer
  • Wybierz swoją aplikację W aplikacji
  • Wklej długotrwały token dostępu do Token dostępu
  • obok Token dostępu wybierz stronę, dla której chcesz uzyskać token dostępu. Token dostępu pojawia się jako nowy sznurek.
  • Kliknij i aby zobaczyć właściwości tego tokena dostępu
  • Kliknij ponownie przycisk" Otwórz w narzędziu access Token", aby otworzyć narzędzie Access Token Debugger, aby sprawdzić właściwości

Jedna wskazówka, u mnie działa tylko wtedy, gdy językiem strony jest Angielski .

 4
Author: Fabian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-15 12:26:26

Oprócz wymienionych metod warto wspomnieć, że dla aplikacji typu server-to-server można również użyć tej formy tokenu stałego dostępu: app_id|app_secret Ten typ tokenu dostępu nazywa się tokenem aplikacji. Zazwyczaj może być używany do wywoływania API grafu i zapytań o węzły publiczne w back-endzie aplikacji. Jest on wymieniony tutaj: https://developers.facebook.com/docs/facebook-login/access-tokens

 3
Author: azec_pdx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-08 16:47:17

Limit żądania aplikacji osiągnięty (#4) - FB API v2.1 i większe

Ta odpowiedź doprowadziła mnie do "ostatecznej odpowiedzi dla nas" , więc jest ona bardzo powiązana, więc dołączam ją tutaj. Chociaż jest to związane z powyższym, jest inaczej i wydaje się, że FB uprościło ten proces.

Nasze liczniki udostępniania na naszej stronie przestały działać, gdy FB przewrócił api do v 2.1. W naszym przypadku mieliśmy już aplikację FB i nie korzystaliśmy z loginu FB. Więc to, co musieliśmy zrobić, to dostać a FB App Token {[8] } do składania nowych wniosków. 2010-08-09 19: 00 23 2016.

  1. idź do: https://developers.facebook.com/tools/explorer
  2. Wybierz wersję api, a następnie użyj GET i wklej następujące elementy:

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    Będziesz chciał zabrać swój app id i swój app secret ze strony aplikacji. Główna Strona programisty aplikacji FB

  3. Uruchom Zapytanie o Wykres, a zobaczysz:

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    Gdzie

    "app-id"
    i
    "app-token"
    będzie twoim ID aplikacji ze strony aplikacji FB i wygenerowanego hasha aplikacji FB, który właśnie otrzymałeś.
  4. Następnie przetestuj swój nowy token dostępu do aplikacji: FB Access Token tester

  5. Powinieneś zobaczyć, wklejając

    "app-token"
    do testera tokenów, jednego tokena opartego na aplikacji bez daty wygaśnięcia/czasu.

W naszym przypadku używamy FB js sdk więc zmieniliśmy nasze wywołanie tak (proszę pamiętać, że dostaje tylko udział licz , a nie liczbę akcji i komentarzy połączonych tak, jak kiedyś):

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

To teraz działa poprawnie. Wymagało to wielu poszukiwań i oficjalnego zgłoszenia błędu z FB, aby potwierdzić, że musimy rozpocząć składanie tokenizowanych żądań do api FB. Na marginesie poprosiłem, aby (FB) dodali wskazówkę do kodu błędu (#4), który wspomina o tokenizowanym żądaniu.

Właśnie otrzymałem kolejny raport od jednego z naszych programistów, że liczba komentarzy na FB również jest zepsuta z powodu nowego potrzeba tokenizowanych żądań, więc zaktualizuję to odpowiednio.

 1
Author: wittmason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 15:12:13

Wiele z tych przykładów nie działa, Nie wiem, czy to z powodu 2.9 v wychodzi, ale walnąłem się w głowę. W każdym razie wziąłem wersję @ dw1 i zmodyfikowałem ją trochę za pomocą @ kfunk video i dostałem to działa dla mnie dla 2.9. Mam nadzieję, że to pomoże.

$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r = json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/{$args['pageid']}?fields=access_token&access_token={$longtoken}")); // get user id
    $finaltoken=$r->access_token;
    return $finaltoken;
}
 1
Author: Cesar Bielich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 21:15:09

Znalazłem tę odpowiedź, która odnosi się do tego narzędzia, które naprawdę bardzo pomogło.

Mam nadzieję, że ta odpowiedź jest nadal aktualna, gdy to czytasz.

 0
Author: Bamboomy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-07 08:27:54